AudioStreamPlayer で ゲームにサウンドをもたらす
https://gyazo.com/60d8dc1067906569a428081a402f84ac
Nodeの追加で"audio" と入力すると、3つのNodeが出てくる
AudioStreamPlayer : 基本となるNode。transformを持たず、どこにおいても同じ聞こえ方
2D : x, y がある。
3D : x, y, z
AudioStreamPlayer
基本的に、1つの音声ファイルに対して1つのStreamPlayerを割り当てる。
複数の音声を使うなら、その分のAudioStreamPlayerを作って使い分ける。
少ない場合は、.streamプロパティに逐一別のStreamを代入して使い分ける。
Props
Stream
音声ファイルを指定する
ファイルシステムからドラッグしてくればOK
Playing
ループにチェックが入っていると、なり続ける
AutoPlay
AudioStreamPlayerがインスタンス化されたら、自動で1回再生する(ループならずっと)
オーディオファイルのimport設定
ジャンプなどのSFXは1ショットでいい
BGMなどはループする。
デフォルトはループになっているので、ループしない音声はチェックを外す
1. ファイルシステムで音声ファイルを選択
2. インポートタブ(シーンタブの横)
3. ループのチェックを外す
4. "再インポート"ボタンを押す
https://gyazo.com/a22cf56a7b4439a5bf99b4002590bf08
アセットのインポート設定は、ファイルシステム上のメタファイル(エディタでは見えない)
に書き込まれている。
Scriptから鳴らす
code: py
func jump():
if Input.is_action_pressed("jump") and is_on_floor():
motion.y -= JUMP_SPEED
if not $AudioStreamPlayer.playing: # 実は意味がない
$AudioStreamPlayer.stream = load("res://Hoppy-Days-Assets/SFX/jump1.ogg")
$AudioStreamPlayer.play()
AudioStreamPlayer.
stream
setter/getter
loadしておいたAudioStreamオブジェクトを代入できる
play()
streamにセットされているAudioStreamを再生する
実際に鳴らすときになってloadするのは効率が悪い。
事前に読み込んで置いたほうがパフォーマンスが良さそう
音の途切れ
同じAudioStreamPlayerで、複数の音を切り替えながら再生すると、
別の音を同時に鳴らそうとするときに片方が途切れる
JumpSFX
PainSFX
のように、AudioStreamごとに分けたNodeを作って別々に鳴らすようにする。
また、鳴らすときにいちいち .streamにリソースをロードして代入するのもパフォーマンスに悪いので、
インスペクタで読み込んでおいて、あとは触らないようにする。
LevelのBGM
ステージにBGMをつける
ジャンプ音、ダメージ音 > プレイヤーに関するものなので、Player sceneに入れる
BGM > Level scene に入れる
https://gyazo.com/95a20bf7b911aaadbc46cdfca36a9601
BGMは位置に関係ないので普通ので作る。
AudioStreamPlayerを作成して、BGMという名前にする。
ステージ開始時に再生するには?
code: BGM.py
extends AudioStreamPlayer
func _ready():
play()
このようなスクリプトを書いてもいいが、この程度のことはコーディング無しでできる。
コーディングなしでできることはスクリプトは書かないようにしよう(管理対象が増えて大変)
インスペクタでAutoplay プロパティをチェックしておけばいい。
Volume Db: 音割れを防ぐ
音量レベルが0dbを超えると、音データが欠けるので音割れになる
デシベルを下げておくことで、音割れを防ぐ
2通りの方法
AudioStreamPlayer.volume_db を下げる
Audio Mixerを使う
Audio Mixer
https://gyazo.com/f3b1a01bf0902e5556c23c39149cd5bd
エディタの下の、"オーディオ"を選択すると出てくる。
つまみを下げると、そのデシベル以下になるように全体の音量を自動で調節してくれる。
便利。
ただし、BGM, SFXを個別に調整したいときは前者の方法のほうがいい
まとめ
AudioStreamPlayer
2D, 3Dもある
インポート設定
音声のループを変更して、再インポート
import タブ
音割れ調整
AudioStreamPlayer > インスペクタ > Volume_Db
下のメニュー > Audio > ミキサー